package cn.qayy.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;

import cn.qayy.constants.CollectionConstant;
import cn.qayy.constants.Constant;
import cn.qayy.dto.Msg;
import cn.qayy.dto.MsgInfo;
import cn.qayy.dto.QueryVO;
import cn.qayy.dto.RegisterDTO;
import cn.qayy.po.Basis;
import cn.qayy.po.Bid;
import cn.qayy.po.Register;
import cn.qayy.service.IRegisterService;
import cn.qayy.service.SynchronizationService;
import cn.qayy.service.Uploadable;
import cn.qayy.utils.BeanToMapUtils;
import cn.qayy.utils.DateUtils;
import cn.qayy.utils.DownLoadUtil;
import cn.qayy.utils.ExcelUtils;
import cn.qayy.utils.JsonUtil;
import cn.qayy.utils.ResonseUtils;
import cn.qayy.utils.ServletContextUtils;
import cn.qayy.utils.StringUtil;
import cn.qayy.utils.UploadHandler;


/**
 * @author wangyu
 * 
 * 注册库
 */
@Controller
@RequestMapping(value = "/register/")
@SuppressWarnings("all")
public class RegisterController {
    //注入service
    @Resource(name = "registerServiceImpl")
    private IRegisterService registerService = null;
    
    List<String> multiselectCondi = new ArrayList<String>();    //可多选的条件
    
    
    @ResponseBody
    @RequestMapping(value="upload")
    public Object upload(@RequestParam("excelFile") MultipartFile file,HttpServletRequest request){
    	Msg msg = null;
    	int listSize = 0;	//excel记录数
    	try {
    		Map<String, List<Uploadable>> map = UploadHandler.getLastData(file,RegisterDTO.class);
    		
    		if(map.get("fail") != null && !map.get("fail").isEmpty()) {//前台提示消息
    			//验证不通过，前台提示消息 
    			List<Uploadable> list = map.get("fail");
    			msg = new Msg(Constant.CHECK_CODE,list);
    		} else {//DB持久化
    			registerService.persistence(map,request,null);
    			
    			//用户上传的总记录数
				if(map.get("totalCount") != null) {
					MsgInfo msgInfo = (MsgInfo)map.get("totalCount").get(0);
    	    		listSize = StringUtil.parseInt(msgInfo.getErr_num());
				}
				msg = new Msg(Constant.SUCESSFUL_CODE,"总记录数："+listSize+"，总成功数："+listSize+"，请核查！");
    		}
    	} catch (Exception e) {
    		//e.printStackTrace();
    		msg = new Msg(Constant.FAIL_CODE,Constant.FAIL_MSG+e.getMessage());
    	}
    	return msg;
    }

    @ResponseBody
    @RequestMapping(value="selectForList")
    public Object selectForList(RegisterDTO dto,String pageNumber,String pageSize){
    	Msg msg = null;
		try {
			Map<String, Object> params = new HashMap<String,Object>();
			params = BeanToMapUtils.objectToMap_strong(dto);
			params.put("pageNumber", pageNumber);
			params.put("pageSize", pageSize);
			PageInfo<Register> pageInfo = registerService.selectForList(params);
			msg = new Msg(Constant.SUCESSFUL_CODE,pageInfo);
		} catch(Exception e) {
			//e.printStackTrace();
			msg = new Msg(Constant.FAIL_CODE,e.getMessage());
		}
		return msg;
    }

    @ResponseBody
    @RequestMapping(value="selectByID")
    public Object selectByID(Integer id){
    	Msg msg = null;
    	try {
        	Register register = registerService.selectRegisterByID(id);
        	msg = new Msg(Constant.SUCESSFUL_CODE,register);
		} catch (Exception e) {
			//e.printStackTrace();
			msg = new Msg(Constant.FAIL_CODE,Constant.FAIL_MSG+e.getMessage());
		}
    	return msg;
    }
    /***
     * 什么也不做的异步请求
     * @return
     */
    @ResponseBody
    @RequestMapping(value="nothing")
    public Object nothing(){
    	return new Msg(Constant.SUCESSFUL_CODE,null);
    }

    @ResponseBody
	@RequestMapping(value = "saveOrUpdate")
	public Object saveOrUpdate(RegisterDTO dto,HttpServletRequest request) {
    	Msg msg = null;
		String flag = (String) request.getParameter("flag");
		dto.setIsUpdate(flag);
		try {
			//验证数据
			Map<String, List<Uploadable>> map = UploadHandler.getLastData(dto);
			if(map.get("fail") != null && !map.get("fail").isEmpty()) {//验证不通过，前台提示消息
				/**
				 * 验证不通过，前台提示消息 
				 */
				List<Uploadable> list = map.get("fail");
				msg = new Msg(Constant.CHECK_CODE,list);
			} else {//验证通过，DB持久化
				registerService.persistence(map,request,null);
				msg = new Msg(Constant.SUCESSFUL_CODE,"总记录数："+1+"，总成功数："+1+"，请核查！");
			}
		} catch (Exception e) {
			//e.printStackTrace();
			msg = new Msg(Constant.FAIL_CODE,Constant.FAIL_MSG+e.getMessage());
		}
		return msg;
	}
    
    /***
	 * 页面下载已筛选的记录
	 * @param request
	 * @param response
	 */
	@RequestMapping(value = "download")
	public void download(HttpServletRequest request, HttpServletResponse response) {
		try {
			List<RegisterDTO> loadDataList = DownLoadUtil.getInstance().getTargetDownLoadDataList(RegisterDTO.class);
			String downloadPath = ExcelUtils.getInstance().dataToExcelDxls("注册库",StringUtil.listToStrArray(CollectionConstant.register_mb),loadDataList);
			String url = request.getContextPath()+"/servlet/FileDownServlet?url="+downloadPath;
			response.sendRedirect(url);
		} catch (Exception e) {
			e.printStackTrace();
		}  
	}

	/***
	 * 展示UI页面
	 * @return
	 */
	@RequestMapping(value="ui")
	public String ui() {
		return "register_search";
	}
	
	/***
	 * 通过id更新注册库
	 * @return
	 */
	@RequestMapping(value="updateRegisterByIds")
	@ResponseBody
	public Object updateRegisterByIds(QueryVO vo) {
		Msg msg = null;
		int doSize = 0;
		try {
			String strId = vo.getId();
			List<String> id2List = StringUtil.strId2List(strId, " ");
			
			Map<String, Object> params = new HashMap<String,Object>();
			params.put("ids",id2List);
			List<Register> list = registerService.selectByMap(params);
			String flag = vo.getFlag(); 
			String trimAll = StringUtil.trimAll(flag);
			if(list != null && !list.isEmpty()) {
				for (Register r : list) {
					r.setFlag(trimAll);
				}
				doSize = registerService.updateByList(list);
			}
			msg = new Msg(Constant.SUCESSFUL_CODE, "总记录数：" + id2List.size() + "，总成功数：" + doSize + "，请核查！");
		} catch (Exception e) {
			//e.printStackTrace();
			msg = new Msg(Constant.FAIL_CODE,Constant.FAIL_MSG+e.getMessage());
		}
		return msg;
	}
	
	/***
	 * 获取待复制的id
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "selectIds")
	public Object selectIds(HttpServletResponse response,HttpServletRequest request) {
		JSONObject json = new JSONObject();
		StringBuilder result=new StringBuilder();
		Msg msg = null;
		try {
			//获取缓存中的筛选条件
			Map<String, Object> params = (Map<String, Object>)DownLoadUtil.get("RegisterDTO");
			if(params == null) {
				params = new HashMap<String, Object>();
				params.put("t", "1127");
			}
			List<Integer> list = registerService.selectIdsByMap(params);
			if(list != null && list.size()>0) {
				for (Integer id : list) {
					result.append(id+" ");
				}
				result.deleteCharAt(result.toString().length()-1);
			}
		} catch(Exception e) {
			e.printStackTrace();
			msg = new Msg(Constant.FAIL_CODE, Constant.FAIL_MSG+e.getMessage());
			return msg;
		}
		json.put("ids", result.toString());
		ResonseUtils.writeResponseByJson(response, json);
		//封装成json返回给前台
		return null;
	}
}
